Configurazione Cursor per sviluppo remoto su VPS

Configurazione Cursor per sviluppo remoto su VPS

> Guida completa per configurare Cursor per sviluppare direttamente sul VPS cPanel senza dover lavorare in locale.

---

1) Prerequisiti

Sul tuo Mac:

  • ✅ Cursor installato
  • ✅ Accesso SSH al VPS (IP, porta, username, password o chiave SSH)
  • Sul VPS:

  • ✅ SSH abilitato e accessibile
  • ✅ PHP 8.2+, Composer 2.7+, Node 20+ installati
  • ✅ Laravel 11 pronto o da installare
  • ✅ Permessi corretti sulla directory di lavoro (es. ~/public_html/sartup)
  • ---

    2) Configurazione SSH locale (macOS)

    Passo 1: Configura il file SSH config

    Apri il terminale e modifica (o crea) il file ~/.ssh/config:

    ``bash nano ~/.ssh/config `

    Aggiungi questa configurazione (sostituisci con i tuoi dati):

    `ssh Host sartup-vps HostName xxx.xxx.xxx.xxx # IP del tuo VPS User cpanel_username # Il tuo username cPanel/SSH Port 22 # Porta SSH (di solito 22, verifica con il tuo provider) IdentityFile ~/.ssh/id_rsa # Percorso alla tua chiave SSH privata ServerAliveInterval 60 # Mantiene la connessione attiva ServerAliveCountMax 3 ForwardAgent yes `

    Se usi password invece di chiave SSH, rimuovi la riga IdentityFile.

    Passo 2: Genera chiave SSH (se non l'hai già)

    Se non hai una chiave SSH o vuoi crearne una dedicata:

    `bash

    Genera nuova chiave

    ssh-keygen -t ed25519 -C "tuo-email@example.com" -f ~/.ssh/sartup_vps

    Copia la chiave pubblica sul VPS

    ssh-copy-id -i ~/.ssh/sartup_vps.pub cpanel_username@xxx.xxx.xxx.xxx
    `

    Poi aggiorna ~/.ssh/config con: ` IdentityFile ~/.ssh/sartup_vps `

    Passo 3: Testa la connessione

    `bash ssh sartup-vps `

    Se ti connetti senza errori, sei pronto! 🎉

    ---

    3) Configurazione Cursor Remote SSH

    Metodo 1: Via Command Palette (Consigliato)

    1. Apri Cursor

    2. Premi Cmd + Shift + P (macOS) per aprire la Command Palette

    3. Cerca e seleziona: ` Remote-SSH: Connect to Host... `

    4. Seleziona sartup-vps dalla lista (se hai configurato ~/.ssh/config) OPPURE inserisci manualmente: ` cpanel_username@xxx.xxx.xxx.xxx `

    5. Si aprirà una nuova finestra di Cursor connessa al VPS

    6. Apri la cartella remota: - Cmd + OOpen Folder - Naviga a: /home/cpanel_username/public_html/sartup - Clicca "OK"

    Metodo 2: Via Terminale Cursor

    1. Apri il terminale integrato in Cursor (Ctrl + backtick o Cmd + J)

    2. Connettiti al VPS: `bash ssh sartup-vps `

    3. Una volta connesso, Cursor rileverà la connessione SSH e ti permetterà di aprire il workspace remoto

    ---

    4) Installazione estensioni sul server remoto

    Quando lavori in remoto, Cursor installa le estensioni sul VPS stesso. Assicurati di installare:

    Estensioni essenziali per Laravel:

  • PHP Intelephense (per autocompletamento PHP)
  • Laravel Blade Snippets (sintassi Blade)
  • Laravel Extra Intellisense (autocompletamento route, view, config)
  • Tailwind CSS IntelliSense (se usi Tailwind)
  • ESLint (per JavaScript/Vue/React)
  • GitLens (per Git integrato)
  • Cursor installerà automaticamente le estensioni sul server quando le attivi nella sidebar.

    ---

    5) Configurazione workspace remoto

    Crea o modifica .vscode/settings.json nella root del progetto sul VPS:

    `json { "php.validate.executablePath": "/usr/bin/php", "php.executablePath": "/usr/bin/php", "intelephense.environment.phpVersion": "8.2.0", "intelephense.files.exclude": [ "/node_modules/", "/vendor//{Tests,tests}/" ], "files.associations": { "*.blade.php": "blade" }, "emmet.includeLanguages": { "blade": "html" }, "blade.format.enable": true, "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode", "[php]": { "editor.defaultFormatter": "bmewburn.vscode-intelephense-client" }, "[blade]": { "editor.defaultFormatter": "shufo.vscode-blade-formatter" }, "terminal.integrated.defaultProfile.linux": "bash", "terminal.integrated.cwd": "${workspaceFolder}" } `

    ---

    6) Workflow di sviluppo tipico

    Primo setup sul VPS (da fare una volta):

    `bash

    Nel terminale Cursor remoto

    cd ~/public_html/sartup

    Se il progetto non esiste ancora

    git clone <repo-url> .

    Setup Laravel

    composer install cp .env.example .env nano .env # Configura DB_*, APP_URL, ecc. php artisan key:generate php artisan migrate --seed php artisan storage:link chmod -R 775 storage bootstrap/cache
    `

    Ciclo di sviluppo normale:

    1. Modifica file in Cursor (i file sono salvati direttamente sul VPS) 2. Testa aprendo https://sartup.it nel browser 3. Commit da Cursor stesso (Git integrato) 4. Push al repository remoto

    Comandi utili nel terminale integrato:

    `bash

    Cache

    php artisan config:clear php artisan route:clear php artisan view:clear php artisan cache:clear

    Migrazioni

    php artisan migrate php artisan db:seed

    Logs

    tail -f storage/logs/laravel.log

    Asset build (se usi Vite/Mix)

    npm run build
    `

    ---

    7) Vantaggi di questo approccio

    Editing diretto: Modifichi i file direttamente sul VPS, niente sync ✅ Test immediato: Salvi e ricarichi https://sartup.it subito ✅ Ambiente identico: Sviluppi esattamente dove andrà in produzione ✅ No Docker: Approccio semplice, perfetto per cPanel ✅ Git integrato: Commit e push direttamente da Cursor ✅ Terminale SSH: Esegui artisan, composer, npm senza uscire da Cursor

    ---

    8) Troubleshooting

    Problema: "Permission denied (publickey)"

    Soluzione: Verifica che la chiave SSH sia corretta o usa password: `bash ssh -v sartup-vps # Output verboso per debug `

    Problema: "Could not establish connection to VPS"

    Soluzione:
  • Verifica firewall sul VPS (porta 22 aperta)
  • Verifica che SSH sia attivo: systemctl status sshd
  • Controlla il file ~/.ssh/config
  • Problema: "Extension host terminated unexpectedly"

    Soluzione:
  • Riconnetti con Cmd+Shift+PRemote-SSH: Reconnect
  • Verifica spazio disco sul VPS: df -h
  • Problema: "Cannot find PHP executable"

    Soluzione: Nel terminale SSH trova il percorso PHP: `bash which php # Es. /usr/bin/php o /opt/cpanel/ea-php82/root/usr/bin/php ` Aggiorna il percorso in .vscode/settings.json

    Problema: Permessi negati su file

    Soluzione:
    `bash

    Ripristina permessi corretti

    cd ~/public_html/sartup chmod -R 755 . chmod -R 775 storage bootstrap/cache chown -R cpanel_user:cpanel_user .
    `

    ---

    9) Best practices

    Sicurezza:

  • ✅ Usa sempre chiavi SSH (non password)
  • ✅ Non committare mai .env (è in .gitignore)
  • ✅ Mantieni credenziali DB sicure
  • ✅ Configura fail2ban sul VPS per proteggere SSH
  • Performance:

  • ✅ Usa php artisan config:cache in produzione
  • ✅ Compila asset con npm run build (non dev)
  • ✅ Abilita OPcache in PHP (di solito già attivo in cPanel)
  • Git workflow:

  • ✅ Lavora su branch feature (git checkout -b feature/nome)
  • ✅ Fai commit piccoli e frequenti
  • ✅ Testa prima di pushare su main/master
  • ✅ Usa .gitignore per escludere node_modules, vendor, .env
  • ---

    10) Comandi rapidi

    Connessione rapida da terminale macOS:

    `bash ssh sartup-vps cd ~/public_html/sartup `

    Sincronizzazione file da locale a remoto (alternativa):

    `bash

    Se proprio devi sincronizzare da locale

    rsync -avz --exclude 'node_modules' --exclude 'vendor' \ /path/locale/progetto/ \ sartup-vps:~/public_html/sartup/
    `

    Backup rapido del DB:

    `bash ssh sartup-vps "mysqldump -u db_user -p db_name > ~/backup.sql" scp sartup-vps:~/backup.sql ./backup_$(date +%Y%m%d).sql `

    ---

    11) Checklist finale

    Prima di iniziare lo sviluppo, verifica:

  • [ ] SSH configurato in ~/.ssh/config
  • [ ] Connessione SSH funzionante (ssh sartup-vps)
  • [ ] Cursor si connette al VPS tramite Remote-SSH
  • [ ] Workspace aperto su ~/public_html/sartup
  • [ ] Estensioni PHP/Laravel installate sul server
  • [ ] Terminale integrato funzionante
  • [ ] File .env configurato sul VPS
  • [ ] Database creato e migrato
  • [ ] Permessi corretti su storage/ e bootstrap/cache/
  • [ ] https://sartup.it accessibile e funzionante

Se tutti i check sono verdi, sei pronto a sviluppare!

---

Note aggiuntive

Compatibilità cPanel

cPanel spesso usa PHP gestito via ea-php82 o simili. Verifica quale versione è attiva: `bash php -v which php `

Se hai più versioni PHP, puoi selezionare quella corretta in cPanel → "Select PHP Version".

Multi-environment

Puoi creare più configurazioni SSH per ambienti diversi:
` Host sartup-dev HostName xxx.xxx.xxx.xxx User cpanel_user_dev Host sartup-prod HostName yyy.yyy.yyy.yyy User cpanel_user_prod ``

Poi scegli a quale connetterti in Cursor.

---

Happy coding! 🚀

Analisi Codice

Blocco 1 bash
nano ~/.ssh/config
Blocco 2 ssh
Host sartup-vps
    HostName xxx.xxx.xxx.xxx    # IP del tuo VPS
    User cpanel_username         # Il tuo username cPanel/SSH
    Port 22                      # Porta SSH (di solito 22, verifica con il tuo provider)
    IdentityFile ~/.ssh/id_rsa   # Percorso alla tua chiave SSH privata
    ServerAliveInterval 60       # Mantiene la connessione attiva
    ServerAliveCountMax 3
    ForwardAgent yes
Blocco 3 bash
# Genera nuova chiave
ssh-keygen -t ed25519 -C "tuo-email@example.com" -f ~/.ssh/sartup_vps

# Copia la chiave pubblica sul VPS
ssh-copy-id -i ~/.ssh/sartup_vps.pub cpanel_username@xxx.xxx.xxx.xxx
Blocco 4
IdentityFile ~/.ssh/sartup_vps
Blocco 5 bash
ssh sartup-vps
Blocco 6
   Remote-SSH: Connect to Host...
   
Blocco 7
   cpanel_username@xxx.xxx.xxx.xxx
   
Blocco 8 bash
   ssh sartup-vps
   
Blocco 9 json
{
    "php.validate.executablePath": "/usr/bin/php",
    "php.executablePath": "/usr/bin/php",
    "intelephense.environment.phpVersion": "8.2.0",
    "intelephense.files.exclude": [
        "**/node_modules/**",
        "**/vendor/**/{Tests,tests}/**"
    ],
    "files.associations": {
        "*.blade.php": "blade"
    },
    "emmet.includeLanguages": {
        "blade": "html"
    },
    "blade.format.enable": true,
    "editor.formatOnSave": true,
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "[php]": {
        "editor.defaultFormatter": "bmewburn.vscode-intelephense-client"
    },
    "[blade]": {
        "editor.defaultFormatter": "shufo.vscode-blade-formatter"
    },
    "terminal.integrated.defaultProfile.linux": "bash",
    "terminal.integrated.cwd": "${workspaceFolder}"
}
Blocco 10 bash
# Nel terminale Cursor remoto
cd ~/public_html/sartup

# Se il progetto non esiste ancora
git clone <repo-url> .

# Setup Laravel
composer install
cp .env.example .env
nano .env  # Configura DB_*, APP_URL, ecc.
php artisan key:generate
php artisan migrate --seed
php artisan storage:link
chmod -R 775 storage bootstrap/cache
Blocco 11 bash
# Cache
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan cache:clear

# Migrazioni
php artisan migrate
php artisan db:seed

# Logs
tail -f storage/logs/laravel.log

# Asset build (se usi Vite/Mix)
npm run build
Blocco 12 bash
ssh -v sartup-vps  # Output verboso per debug
Blocco 13 bash
which php  # Es. /usr/bin/php o /opt/cpanel/ea-php82/root/usr/bin/php
Blocco 14 bash
# Ripristina permessi corretti
cd ~/public_html/sartup
chmod -R 755 .
chmod -R 775 storage bootstrap/cache
chown -R cpanel_user:cpanel_user .
Blocco 15 bash
ssh sartup-vps
cd ~/public_html/sartup
Blocco 16 bash
# Se proprio devi sincronizzare da locale
rsync -avz --exclude 'node_modules' --exclude 'vendor' \
  /path/locale/progetto/ \
  sartup-vps:~/public_html/sartup/
Blocco 17 bash
ssh sartup-vps "mysqldump -u db_user -p db_name > ~/backup.sql"
scp sartup-vps:~/backup.sql ./backup_$(date +%Y%m%d).sql
Blocco 18 bash
php -v
which php
Blocco 19
Host sartup-dev
    HostName xxx.xxx.xxx.xxx
    User cpanel_user_dev
    
Host sartup-prod
    HostName yyy.yyy.yyy.yyy
    User cpanel_user_prod